Computing resource service providers have provided computing resources in a number of different ways. Early computing resources such as large mainframe computers were made available to customers through computer timesharing services. Over time, the cost of computers declined, and renting dedicated physical computer servers became more common. Customer demands for increased resource flexibility led to the development of virtual computing environments and application hosting environments that decoupled the computing environment provided to the customer from the physical computers of the service provider.
Customers are now able to deploy large distributed applications within environments that include multiple physical and/or virtual computing resources. Some customers use containers to provide an isolated execution environment for each customer task. Containers enable flexibility in the deployment of customer applications, as well as control over the computing resources allocated to each customer task. However, since the various customer tasks are isolated from each other, it can be difficult to coordinate across different customer tasks. Since a large distributed application may include dozens or hundreds of containers that work together to form a distributed system, enabling the coordination of containerized customer applications is an important problem.